8.1.1 混合模式概述
混合模式能够将两张图片无缝结合,实现类似 Photoshop 中的两张图片融合效果。
混合模式是通过 Paint 类中的 Xfermode setXfermode(Xfermode xfermode) 函数实现的,它的参数 Xfermode 是一个空类,主要靠它的子类来实现不同的功能,如下图所示。
在启舰的书里派生自 Xfermode 的子类有 AvoidXfermode、PixelXorXfermode 和 PorterDuffXfermode,并且讲解了相关的知识。但笔者在 2019 年最新的官方文档中,已经找不到 AvoidXfermode 和 PixelXorXfermode 这两个类的相关文档,且在 AndroidX 系列中不支持相关 API。若想了解详情,请点击前往启舰的博客。
在使用 Xfermode 时,需要做两件事。
1)禁用硬件加速1setLayerType(View.LAYER_TYPE_SOFTWARE, null);
2)使用离屏绘制(详见第九章)12345678// 新建图层int layerId = canvas.saveLayer(0,0,getWidth(),getHeight(),null, Canvas.ALL_SAVE_FLAG);// 核心绘制代码...// 还原图层canvas.restoreToCount(layerId);